package com.yb.custom.annotation.log.controller.vo;

import lombok.Data;

/**
 * 接口返回数据统一封装类
 *
 * @author yangbiao
 * @date 2022/3/30
 */
@Data
public class ResultVO<T> {
    public static final String OK = "操作成功";
    public static final String NO_OK = "操作失败";
    public static final Integer OK_CODE = 200;
    public static final Integer BAD_REQUEST_CODE = 400;
    public static final Integer CUSTOM_BAD_REQUEST_CODE = 4000;

    private Integer code;
    private String message;
    private T data;

    /**
     * 接口调用返回数据方法
     *
     * @param t
     * @param <T>
     * @return
     */
    public static <T> ResultVO<T> success(T t) {
        return success(t, OK_CODE, OK);
    }

    /**
     * 接口调用返回数据方法
     *
     * @param t
     * @param code
     * @param message
     * @return
     */
    public static <T> ResultVO<T> success(T t, Integer code, String message) {
        ResultVO<T> result = new ResultVO<>();
        result.setCode(OK_CODE);
        result.setMessage(OK);
        result.setData(t);
        return result;
    }

    /**
     * 用于返回自定义异常捕获信息,
     * 用一个不同的响应码来给前端方便判断是否可以放心抛出提示
     * @param message
     * @param <T>
     * @return
     */
    public static <T> ResultVO<T> customError(String message) {
        return error(CUSTOM_BAD_REQUEST_CODE, message);
    }

    /**
     * 异常时传入响应信息方法--(基本都是全局异常处理里调用)
     *
     * @param message
     * @return
     */
    public static <T> ResultVO<T> error(String message) {
        return error(BAD_REQUEST_CODE, message);
    }

    /**
     * 异常时传入响应码响应信息方法--(基本都是全局异常处理里调用)
     *
     * @param code
     * @param message
     * @return
     */
    public static <T> ResultVO<T> error(Integer code, String message) {
        ResultVO<T> result = new ResultVO<>();
        result.setCode(code);
        result.setMessage(message);
        return result;
    }

}
